package huanfuan.demo.design;

import huanfuan.demo.design.event.EventManager;
import huanfuan.demo.design.event.listener.MQEventListener;
import huanfuan.demo.design.event.listener.MessageEventListener;

import java.util.EventListener;

/**
 * @Author huanfuan
 * @Date 2022/1/10 16:54
 * @Version 1.0
 */
public abstract class LotteryService {


    private EventManager eventManager;


    public LotteryService(){
        eventManager = new EventManager(EventManager.EventType.MQ,EventManager.EventType.Message);
        eventManager.subscribe(EventManager.EventType.MQ, new MQEventListener());
        eventManager.subscribe(EventManager.EventType.Message, new MessageEventListener());
    }


    public LotteryResult draw(String uId){
        LotteryResult lotteryResult = doDraw(uId);
        // 需要什么通知就给调用什么方法
        eventManager.notify(EventManager.EventType.MQ,lotteryResult);
        eventManager.notify(EventManager.EventType.Message,lotteryResult);
        return lotteryResult;
    }


    protected abstract LotteryResult doDraw(String uId);

}
